/**************************************************************************************
*
*	Copyright (C) 2009 - 2012 Brent Andrew O. Chua - See LICENSE.txt for more info.
*		
*	Filename	-	RenderEntry.h
*
*	Description -	This acts as an executor to the graphics pipeline.
*
*	Comments	-	TODO: Ultimately, once we implement other render stages like shadows
*					reflection, refraction, post-processing and other stages we need to 
*					abstract this class and define each of the stages.
*
*	Modification History:
*			Name			   Date					Description
*			MrCodeSushi	-	10/03/2012	-	Creation of this file
**************************************************************************************/
#ifndef _PSX_RENDER_ENTRY_H_
#define _PSX_RENDER_ENTRY_H_

#include "PulseSTD.h"
#include "GraphicsTypes.h"

namespace Pulse
{
	class RenderEntry
	{
	public:

		RenderEntry( void );

		virtual ~RenderEntry( void );

		void SetStage( ERenderViewStage::Type stage ) { m_stage = stage; }

		const ERenderViewStage::Type GetStage( void ) const { return m_stage; }

		void SetStageStep( ERenderViewStageStep::Type stageStep ) { m_stageStep = stageStep; }

		const ERenderViewStageStep::Type GetStageStep( void ) const { return m_stageStep; }

		virtual void PreExecute( GraphicsPipeline *pPipeline ) { }

		virtual void Execute( GraphicsPipeline *pPipeline ) { }

		virtual void PostExecute( GraphicsPipeline *pPipeline ) { }

	protected:

		ERenderViewStage::Type		m_stage;
		ERenderViewStageStep::Type m_stageStep;

	};
}

#endif /* _PSX_RENDER_ENTRY_H_ */